package Proyecto0.src.TDALista;
import java.util.Iterator;

/**La clase element iterator implementa los metodos que utilizara la clase Iterator.
 * La implementacion esta basada en una lista
 * 
 * 
 * @author Graff Javier(99789)
 * @author Avodet Eric (97734)
 *
 * @param <E> tipo de datos que contendra la lista
 */

public class ElementIterator<E> implements Iterator<E> 
{
	//Lista sobre la cual actuara el iterador
	protected PositionList<E> list;
	//Indice para recorrer la lista
	protected Position<E> cursor;
	
	/**
	 * La lista que iterara sera la ingresada por parametro, ademas posiciona el cursor en la primer posicion o si la lista es vacia el cursor sera nulo
	 * @param l lista sobre la cual se iterara
	 */
	public ElementIterator(PositionList<E> l)
	{
		list=l;
		try
		{
			cursor= (list.isEmpty())?null:list.first();
		}
		catch(EmptyListException e)
		{
			System.out.println(e.getMessage());
		}
	}
	
	 
	 /**
	  * Verifica que halla elementos para recorrer en el iterador
	  */
	public boolean hasNext() 
	{
		return (cursor!=null);
	}

	
	/**
	 * Retorna el siguiente elemento en el iterador
	 */
	public E next()
	{
		E aux=cursor.element();
		try 
		{
			cursor = (cursor==list.last())?null:list.next(cursor);
		} 
		catch (EmptyListException e) 
		{
			System.out.println(e.getMessage());
		} 
		catch (InvalidPositionException e) 
		{
			System.out.println(e.getMessage());
		} 
		catch (BoundaryViolationException e) 
		{
			System.out.println(e.getMessage());
		}
		return aux;
	}

	//no implementada
	public void remove() 
	{
		// TODO Auto-generated method stub	
	}

}
